package com.example.fengyungo.service.impl;

import com.example.fengyungo.constant.UserConstant;
import com.example.fengyungo.dao.UserDao;
import com.example.fengyungo.domain.pojo.User;
import com.example.fengyungo.service.UserService;
import com.example.fengyungo.util.CommonUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    /**
     * 根据用户名和密码查询用户
     *
     * @param username 用户名（账号）
     * @param password 密码
     * @return List<User>
     */
    @Override
    public List<User> getUserByUsernameAndPassword(String username, String password) {
        List<User> users = userDao.getUserByUsernameAndPassword(username, password);
        if (users.size() > 0) {
            // 隐藏密码
            users.get(0).setUserPassword("");
        }
        return users;
    }

    /**
     * 新增用户
     *
     * @param user User
     * @return Boolean
     */
    @Override
    public Boolean addUser(User user) {
        // 填充user的空值
        // 根据注册时间生成id
        String id = CommonUtils.initIdByNowTime();
        String createTime = CommonUtils.getNowTime();

        user.setUserId("u" + id);
        user.setUserCreateTime(createTime);
        user.setUserStatus(UserConstant.STATUS_NOT_ACCESS);
        user.setUserSex(UserConstant.UNSETTED);
        user.setUserPhone(UserConstant.UNSETTED);
        user.setUserIdCard(UserConstant.UNSETTED);
        user.setUserAvatar(UserConstant.UNSETTED);
        user.setUserNickname(UserConstant.UNSETTED);

        Boolean res = userDao.addUser(user);
        return res;
    }

    /**
     * 通过用户名（账号）查找用户，用来判断用户名是否已被使用
     *
     * @param username 用户名（账号）
     * @return List<User>
     */
    @Override
    public List<User> getUserByUsername(String username) {
        List<User> userByUsername = userDao.getUserByUsername(username);
        return userByUsername;
    }

    /**
     * 通过邮箱查找用户，用来判断邮箱是否已被注册
     *
     * @param mail 邮箱
     * @return List<User>
     */
    @Override
    public List<User> getUserByMail(String mail) {
        List<User> userByMail = userDao.getUserByMail(mail);
        return userByMail;
    }

    /**
     * 更新用户昵称
     *
     * @param nickname 昵称
     * @param id       用户id
     * @return Integer
     */
    @Override
    public Integer updateNicknameById(String nickname, String id) {
        Integer res = userDao.updateNicknameById(nickname, id);
        return res;
    }

    /**
     * 更新用户性别
     *
     * @param sex 性别
     * @param id  用户id
     * @return Integer
     */
    @Override
    public Integer updateSexById(String sex, String id) {
        Integer res = userDao.updateSexById(sex, id);
        return res;
    }

    /**
     * 更新用户电话
     *
     * @param phone 电话
     * @param id    用户id
     * @return Integer
     */
    @Override
    public Integer updatePhoneById(String phone, String id) {
        Integer res = userDao.updatePhoneById(phone, id);
        return res;
    }

    /**
     * 修改用户信息，根据id
     *
     * @param user User
     * @return Integer
     */
    @Override
    public Integer updateUserById(User user) {
        Integer res = userDao.updateUserById(user);
        return res;
    }

    /**
     * 根据id查询用户
     *
     * @param id 用户id
     * @return User
     */
    @Override
    public User getUserById(String id) {
        User user = userDao.getUserById(id);
        return user;
    }

    /**
     * 获取用户旧密码
     *
     * @param username 用户名
     * @return String
     */
    @Override
    public String getOldPassword(String username) {
        return userDao.getPasswordByUsername(username);
    }

    /**
     * 修改用户密码
     *
     * @param username 用户名
     * @param password 新密码
     * @return Integer
     */
    @Override
    public Integer updatePassword(String username, String password) {
        return userDao.updatePassword(username, password);
    }

    /**
     * 根据条件查询用户
     *
     * @param user 用户
     * @return List<User>
     */
    @Override
    public List<User> getUsersByCondition(User user) {
        return userDao.getUsersByCondition(user);
    }

    /**
     * 获取所有用户
     *
     * @return List<User>
     */
    @Override
    public List<User> getAllUsers() {
        List<User> allUsers = userDao.getAllUsers();
        return allUsers;
    }
}
